package com.songlanyun.modules.usercart.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import java.math.BigDecimal;
import java.io.Serializable;
import java.util.Date;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.songlanyun.common.drive.RootEntity;
import com.songlanyun.common.utils.SpringContextUtils;
import com.songlanyun.common.validator.group.AddGroup;
import com.songlanyun.common.validator.group.UpdateGroup;
import com.songlanyun.modules.goods.entity.Goods;
import com.songlanyun.modules.goods.entity.GoodsSku;
import com.songlanyun.modules.goods.service.GoodsAuthShopService;
import com.songlanyun.modules.goods.service.GoodsService;
import com.songlanyun.modules.goods.service.GoodsSkuService;
import com.songlanyun.modules.rabbitmq.util.SpringContextUtil;
import com.songlanyun.modules.singlegoods.entity.ProductSingleGoodsEntity;
import com.songlanyun.modules.singlegoods.service.ProductSingleGoodsService;
import lombok.Data;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;

/**
 * 会员的购物车表
 *
 * @author lubo
 * @email sunlightcs@gmail.com
 * @date 2020-11-12 09:27:04
 */
@Data
@TableName("yxt_sale_user_shopping_cart")
public class UserCart extends RootEntity<Long,UserCart> implements Serializable {
	private static final long serialVersionUID = 1L;

	/**
	 *
	 */
	@TableId
	private Long id;
	/**
	 * 商品隶属店铺id
	 */
	private Long shopId;

	/**
	 * 来源门店
	 */
	private Long sourceShopId;

	/**
	 * 是否是代销
	 */
	private Boolean getProxy()
	{
		return this.getShopId().equals(getSourceShopId());
	}

	/**
	 * 隶属商家店铺名称（容余）
	 */
	private String shopName;

	/**
	 * 来源门店名称
	 */
	private String sourceShopName;
	/**
	 * 所属会员
	 */
	private Long userId;
	/**
	 * 商品id
	 */
	private Long goodsId;
	/**
	 * 商品标题（容余）
	 */
	private String goodsTitle;
	/**
	 * 商品的短标题（容余）
	 */
	private String goodsShortTitle;


	/**
	 *  是否是平台店的商品
	 */
	private Boolean platformStore;
	/**
	 * 商品的封页图片（容余）
	 */
	private String goodsCover;
	/**
	 * 存入的数量
	 */
	@Min(value = 1,message = "商品数量最小是1")
	@Max(value = 999,message = "商品数量最大是999")
	private Integer num;
	/**
	 * 规则文本（黄;3000;高底;50M）（容余）
	 */
	private String skuSetName;
	/**
	 * 规格hash值
	 */
	private String skuHashCode;
	/**
	 * 销售价(添加进购物车时的价格)
	 */
	private BigDecimal salePrice;

	/**
	 * 需要使用的积分(添加进购物车时的需要使用的积分)
	 */
	private BigDecimal point;

	@TableField(fill = FieldFill.INSERT)
	private Date createTime;

	@TableField(fill = FieldFill.INSERT_UPDATE)
	private Date updateTime;

	@Override
	public Long getIdentity() {
		return getId();
	}

	/**
	 * 商品
	 */
	@TableField(exist = false)
	@JsonIgnore
	private Goods goods;
	/**
	 * 加载当前商品
	 * @return
	 */
	public Goods loadGoods()
	{
		if(goods==null)
		{
			GoodsService service = ((GoodsService) SpringContextUtils.getBean("goodsService"));
			goods = service.getById(this.getGoodsId());
		}
		return goods;
	}

	/**
	 * 是否是第三方商品
	 */
	private Boolean third;



	/**
	 * 商品的sku
	 */
	@TableField(exist = false)
	@JsonIgnore
	private GoodsSku goodsSku ;
	/**
	 * 加载当前商品的sku
	 * @return
	 */
	public GoodsSku loadGoodsSku()
	{
		if(goodsSku==null)
		{
			GoodsSkuService service = ((GoodsSkuService) SpringContextUtils.getBean("goodsSkuService"));
			goodsSku = service.loadByGoodsAndSkuHashCode(this.getGoodsId(),this.getSkuHashCode());
		}
		return goodsSku;
	}

	/**
	 * 加载当前的单品
	 */
	@TableField(exist = false)
	@JsonIgnore
	private ProductSingleGoodsEntity singleGoods ;
	public ProductSingleGoodsEntity loadSingleGoods()
	{
		if(singleGoods==null)
		{
			GoodsSku goodsSku = this.loadGoodsSku();
			if(goodsSku!=null)
			{
				return goodsSku.getSingleGoods();
			}
			else
			{
				return null;
			}
		}
		return singleGoods;
	}
}
